package request

import (
	"errors"
	"go-api/internal/model"
	"go-api/internal/utils/validator"
)

type RegisterReq struct {
	Name     string `json:"name"`     // 用户名
	NickName string `json:"nickName"` // 昵称
	Password string `json:"password"` // 密码
	Email    string `json:"email"`    // 邮箱
	Phone    string `json:"phone"`    // 电话
	Remark   string `json:"remark"`   // 备注
	Pid      int64  `json:"pid"`      // pid
	Address  string `json:"address"`  // 地址
}

func (r RegisterReq) CheckParam() error {
	if r.Name == "" {
		return errors.New("用户名不能为空")
	}

	if r.Password == "" {
		return errors.New("密码不能为空")
	}

	if r.Email == "" {
		return errors.New("邮箱不能为空")
	}

	if r.Phone == "" {
		return errors.New("电话不能为空")
	}

	if len([]rune(r.Name)) > 8 {
		return errors.New("名字长度不能大于8")
	}

	if len([]rune(r.NickName)) > 10 || r.NickName == "" {
		return errors.New("昵称长度不能大于10")
	}

	if len([]rune(r.Remark)) > 50 {
		return errors.New("备注长度不能大于50")
	}

	if len([]rune(r.Address)) > 30 {
		return errors.New("地址长度不能大于30")
	}

	ok, err := validator.IsValidEmail(r.Email)
	if !ok || err != nil {
		return err
	}

	ok, err = validator.IsValidPhone(r.Phone)
	if !ok || err != nil {
		return err
	}

	ok, err = validator.IsValidPass(r.Password)
	if !ok || err != nil {
		return err
	}

	return nil
}

type AuditReq struct {
	Id          int64             `json:"id"`          // 审核记录ID
	AuditOp     model.AuditStatus `json:"auditOp"`     // 审核类型
	AuditRemark string            `json:"auditRemark"` // 审核意见
}

type LoginReq struct {
	Name     string `json:"name"`     // 电话或者邮箱
	Password string `json:"password"` // 需要加密非明文传输
}

func (l *LoginReq) CheckParam() error {
	if l.Name == "" || l.Password == "" {
		return errors.New("账户或者密码不能为空")
	}

	return nil
}
